package com.sybil.spa.dominio;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(name = "SPA_FLUJOS")
public class Flujo implements Serializable {

   private static final long serialVersionUID = 1L;
   private String clave;
   private String descripcion;
   private String descripcionCorta;
   private String tipo;
   private String validaMonto;
//   private String restringido;
   private String estatus;
   private String comentarios;
   private String usuarioCreo;
   private String usuarioModif;
   private List<Paso> pasos;

   public Flujo() {
   }

   public Flujo(String flujClave) {
      this.clave = flujClave;
   }

   public Flujo(String clave, String descripcion, String validaMonto, String estatus, String usuarioCreo) {
      this.clave = clave;
      this.descripcion = descripcion;
      this.validaMonto = validaMonto;
      this.estatus = estatus;
      this.usuarioCreo = usuarioCreo;
   }

   @Id
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 4)
   @Column(name = "FLUJ_CLAVE")
   public String getClave() {
      return clave;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 100)
   @Column(name = "FLUJ_DESCRIPCION")
   public String getDescripcion() {
      return descripcion;
   }

   @Size(max = 15)
   @Column(name = "FLUJ_DESC_CORTA")
   public String getDescripcionCorta() {
      return descripcionCorta;
   }

   @Basic(optional = false)
   @Column(name = "FLUJ_TIPO")
   public String getTipo() {
      return tipo;
   }

   @NotNull
   @Size(min = 1, max = 1)
   @Basic(optional = false)
   @Column(name = "FLUJ_VALIDA_MONTO")
   public String getValidaMonto() {
      return validaMonto;
   }

//   @NotNull
//   @Size(min = 1, max = 1)
//   @Basic(optional = false)
//   @Column(name = "FLUJ_RESTRINGIDO")
//   public String getRestringido() {
//      return restringido;
//   }

   @Basic(optional = false)
   @Column(name = "FLUJ_ESTATUS")
   public String getEstatus() {
      return estatus;
   }

   @Size(max = 250)
   @Column(name = "FLUJ_COMENTARIOS")
   public String getComentarios() {
      return comentarios;
   }

   @Basic(optional = false)
   @Column(name = "FLUJ_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   @Column(name = "FLUJ_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   @OneToMany(cascade = CascadeType.ALL, mappedBy = "flujo")
//   @XmlTransient
   public List<Paso> getPasos() {
      return pasos;
   }

   public void setClave(String clave) {
      this.clave = clave;
   }

   public void setDescripcion(String descripcion) {
      this.descripcion = descripcion;
   }

   public void setDescripcionCorta(String descripcionCorta) {
      this.descripcionCorta = descripcionCorta;
   }

   public void setTipo(String tipo) {
      this.tipo = tipo;
   }

   public void setValidaMonto(String validaMonto) {
      this.validaMonto = validaMonto;
   }

//   public void setRestringido(String restringido) {
//      this.restringido = restringido;
//   }

   public void setEstatus(String estatus) {
      this.estatus = estatus;
   }

   public void setComentarios(String comentarios) {
      this.comentarios = comentarios;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   public void setPasos(List<Paso> pasos) {
      this.pasos = pasos;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (clave != null ? clave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof Flujo)) {
         return false;
      }
      Flujo other = (Flujo) object;
      if ((this.clave == null && other.clave != null) || (this.clave != null && !this.clave.equals(other.clave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "Flujo[ clave=" + clave + " ]";
   }
}
